
{/* <div :class="c" class="demo" v-if="isShow">
    <span v-for="item in sz">{{item}}</span>
</div> */}

let ast = {
  /* 标签属性的map，记录了标签上属性 */
  'attrsMap': {
      ':class': 'c',
      'class': 'demo',
      'v-if': 'isShow'
  },
  /* 解析得到的:class */
  'classBinding': 'c',
  /* 标签属性v-if */
  'if': 'isShow',
  /* v-if的条件 */
  'ifConditions': [
      {
          'exp': 'isShow'
      }
  ],
  /* 标签属性class */
  'staticClass': 'demo',
  /* 标签的tag */
  'tag': 'div',
  /* 子标签数组 */
  'children': [
      {
          'attrsMap': {
              'v-for': "item in sz"
          },
          /* for循环的参数 */
          'alias': "item",
          /* for循环的对象 */
          'for': 'sz',
          /* for循环是否已经被处理的标记位 */
          'forProcessed': true,
          'tag': 'span',
          'children': [
              {
                  /* 表达式，_s是一个转字符串的函数 */
                  'expression': '_s(item)',
                  'text': '{{item}}'
              }
          ]
      }
  ]
}


function render() {
  with(this) {
    return (isShow) ? _c('div', {
      staticClass: "demo",
      class: c
    }, _l((sz), function (item) {
      return _c('span', [_v(_s(item))])
    }), 0) : _e()
  }
}


const ncname = '[a-zA-Z_][\\w\\-\\.]*';
const singleAttrIdentifier = /([^\s"'<>/=]+)/
const singleAttrAssign = /(?:=)/
const singleAttrValues = [
  /"([^"]*)"+/.source,
  /'([^']*)'+/.source,
  /([^\s"'=<>`]+)/.source
]
const attribute = new RegExp(
  '^\\s*' + singleAttrIdentifier.source +
  '(?:\\s*(' + singleAttrAssign.source + ')' +
  '\\s*(?:' + singleAttrValues.join('|') + '))?'
)

const qnameCapture = '((?:' + ncname + '\\:)?' + ncname + ')'
const startTagOpen = new RegExp('^<' + qnameCapture) // 开始标签
const startTagClose = /^\s*(\/?)>/ // 开始标签结束

const endTag = new RegExp('^<\\/' + qnameCapture + '[^>]*>') // 结束标签

const defaultTagRE = /\{\{((?:.|\n)+?)\}\}/g

const forAliasRE = /(.*?)\s+(?:in|of)\s+(.*)/